
import router from './router'
import store from '@/store'
import { Message } from 'element-ui'
router.beforeEach(async(to, from, next) => {
  const maxTime = 1000 * 60 * 60 * 2
  const time = localStorage.getItem('time')
  const now = Date.now()
  if (time && now - time > maxTime) {
    localStorage.removeItem('time')
    Message.error('超时，请重新登录')
    store.commit('user/logout')
    next('/login')
  }
  const token = store.state.user.token
  if (token) {
    // 已登录
    // 人资当中有个可选的功能, 如果已经登录不能再进入登录页
    if (to.path === '/login') {
      // 1 登录以后还去登录页 -> 跳回首页
      next('/')
    } else {
      // 2 登录以后进入登录页以外页面 -> 放行
      // 在进入页面的时候, 如果发现当前的用户数据不存在
      // 就要调用 action 获取 数据
      const username = store.state.user.userInfo.username
      if (!username) {
        await store.dispatch('user/getUserInfo')
        // 就在这个地方, 保证已经登录
        // 保证正常进入普通页面
        // 保证用户数据已经获取得到
        // 路由筛选调用 vuex
        // 上面确保了员工数据拿到, 这里传入vuex里面使用
        console.log('导航守卫进入页面之前调用筛选路由的 vuex action')
        const menus = store.state.user.userInfo.roles.menus
        store.dispatch('permission/filterRoutes', menus)
        const res = await store.dispatch('permission/filterRoutes', menus)
        router.addRoutes([
          ...res,
          { path: '*', redirect: '/404', hidden: true }
        ])
        next(to.path)
      }
      next()
    }
  } else {
    // 未登录跳到登录页
    // 如果你本来就是去登录页, 应该放行
    // 否则才跳到登录页
    const pathArray = ['/login', '/404', '/testpage']
    if (pathArray.indexOf(to.path) >= 0) {
      // 3 未登录在白名单->放行
      next()
    } else {
      // 4 未登录不在白名单 -> 登录页
      next('/login')
    }
  }
})
